package obstaculo;

import java.util.Random;
import javax.swing.JLabel;
import powerup.*;
import nivel.Casillero;
import nivel.Nivel;
import sprite.estatico.SpriteObstaculo;

/**
 * Clase que modela una caja que contiene un powerup Los powerups son generados
 * pseudo-aleatoriamente utilizando java.util.Random
 * 
 * En cada corrida, los powerups seran diferentes
 * 
 * @author Agustin Orge (LU.85538)
 * @author Victoria Martinez de la Cruz (LU.87620)
 */

public class CajaPowerUp extends Obstaculo {

	/**
	 * Atributos de instancia
	 */
	private Nivel nivel;

	/**
	 * Constructor de CajaPowerUp
	 * 
	 * @param n
	 *            nivel al que se encuentra relacionado
	 * @param ca
	 *            casillero actual
	 * @param so
	 *            pool de sprites
	 */
	public CajaPowerUp(Nivel n, Casillero ca, SpriteObstaculo so) {
		super(ca, so);
		label.setIcon(so.getCajaPowerUp());
		nivel = n;
		agregarPowerUp();
	}

	// Metodo privado que genera aleatoriamente un powerup y lo agrega al
	// casillero
	// de CajaPowerUp
	private void agregarPowerUp() {
		PowerUp p;
		int choice = new Random().nextInt(5);

		switch (choice) {
		case 0: {
			p = new HongoVerde(nivel, casilleroActual);
			nivel.getDirectorPowerUps().agregarPowerUp((Dinamico) p);
		}
			break;
		case 1: {
			p = new HongoRojo(nivel, casilleroActual);
			nivel.getDirectorPowerUps().agregarPowerUp((Dinamico) p);
		}
			break;
		case 2: {
			p = new Estrella(nivel, casilleroActual);
			nivel.getDirectorPowerUps().agregarPowerUp((Dinamico) p);
		}
			break;
		case 3:
			p = new Bomba(nivel, casilleroActual);
			break;
		case 4:
			p = new Flor(nivel, casilleroActual);
			break;
		default: {
			p = new Moneda(nivel, casilleroActual);
			nivel.getControladorMonedas().agregarMoneda((Moneda) p);
		}
			break;
		}

		casilleroActual.setPowerUp(p);
	}

	/**
	 * Reaccion de la caja al ser golpeada por Mario y configuracion de la
	 * grafica (pasa a ser una caja usada)
	 */
	public boolean reaccionarPowerUp() {

		if (casilleroActual.hayPowerUp()) {
			casilleroActual.getPowerUp().activar();
			JLabel cajaUsada = new JLabel(nivel.getGrafica()
					.getPanelComponentes().getIconos().getCajaUsada());
			nivel.getGrafica().getPanelComponentes()
					.reemplazarObstaculo(label, cajaUsada);
		}

		return false;
	}

}
